'''
参数化测试：
    如果要针对某个函数，或者类进行多种数据输入组合的测试，特别是完整性测试时，
    为每一种情况写一句断言，是非常麻烦的事情，借助参数化模块 parameterized，可以解决这一问题。
    @parameterized.expand 下的存放数组，每行都是一组是待测试参数
    带测试参数，传递给can_drive函数，验证函数的功能

    注意：当前只是4组简单的测试，若测试参数较多，可以采用文件存放测试参数，便于维护
'''
import unittest
from parameterized import parameterized


def can_drive(with_license, drunk):
    return with_license and drunk


class TestCanDriver(unittest.TestCase):
    @parameterized.expand([
        [True, True, False],  # 也可以是 tuple
        [True, False, True],
        [False, False, False],
        [False, False, False]
    ])
    def test_can_drive(self,with_license, drunk, expected):
        status = can_drive(with_license, drunk)
        self.assertEqual(status, expected)

loader = unittest.TestLoader()
suite = loader.loadTestsFromTestCase(TestCanDriver)
unittest.TextTestRunner(verbosity=2).run(suite)